package casepattern

/**
  * 基类
  */
abstract class Expr

/**
  * 使用case修饰的类称为样例类，且必须有构造参数列表，scala会帮我们自动完善这个类
  * 1.会加上一个与类同名的工厂方法，所以可以不使用new
  * 2.构造方法中的参数可以不加val，scala会帮忙加上，将其注册成一个字段
  * 3.会实现toString，hashCode以及equals方法
  * 4.会加上一个copy方法来创建修改了某些字段的实例
  */
case class Var(name: String) extends Expr

case class Number(num: Double) extends Expr

case class UnOp(operator: String, arg: Expr) extends Expr

case class BinOp(operator: String, left: Expr, right: Expr) extends Expr

